//
//  Single.h
//  1015-单例模式的应用(宏定义)
//
//  Created by LZB on 14/10/14.
//  Copyright (c) 2014年 LZB. All rights reserved.
//

#define SingleH(name) +(instancetype)share##name;
#if __has_feature(objc_arc)

#define SingleM(name) \
static id _instance;\
+(instancetype)allocWithZone:(struct _NSZone *)zone \
{\
    static dispatch_once_t onceTaken;\
    dispatch_once(&onceTaken, ^{\
        if (!_instance) {\
            _instance = [super allocWithZone:zone];\
        }\
    });\
    return _instance;\
}\
+(instancetype)share##name\
{\
    return [[self alloc] init];\
}\
- (id)copyWithZone:(NSZone *)zone\
{\
    return _instance;\
}\
- (id)mutableCopyWithZone:(NSZone *)zone\
{\
    return _instance;\
}

#else
#define SingleM(name)\
+(instancetype)allocWithZone:(struct _NSZone *)zone \
{\
    static dispatch_once_t onceTaken;\
    dispatch_once(&onceTaken, ^{\
        if (!_instance) {\
            _instance = [super allocWithZone:zone];\
        }\
    });\
    return _instance;\
}\
+(instancetype)shareTools\
{\
    return [[self alloc] init];\
}\
- (id)copyWithZone:(NSZone *)zone\
{\
    return _instance;\
}\
- (id)mutableCopyWithZone:(NSZone *)zone\
{\
    return _instance;\
}\
- (oneway void)release\
{\
    \
}\
- (instancetype)retain\
{\
    return _instance;\
}\
- (NSUInteger)retainCount\
{\
    return MAXFLOAT;\
}\

#endif
